centos 7 // jdk1.8
1. CentOs7 에 설치된 JDK 버전확인 1.1 #java -version
위에 캡쳐는 jdk가 정상적으로 설치되었을때 이고 설치가 되어있지 않다면 자신의 CentOs버전과 비트에 맞는 JDK를 다운로드 받은후 설치하면된다.
2. 설치항목 2.1 GNU AutoConf (at least version 2.53) An ANSI-C compliant compiler (GCC is good) GNU Make A Java Platform 2 compliant SDK
(다른항목들은 자동으로 설치되어있었는데 AutoConf가 설치가 되어있지않아 #yum install autoconf 로 해결) 2.2 위에 2개항목은 다운받아서 옮기거나 직접다운로드하여도된다. #mkdir /root/daemonTest 생성후 #cd /root/daemonTest 로이동 #wget http://archive.apache.org/dist/commons/daemon/binaries/commons-daemon-1.0.5.jar
#wget http://archive.apache.org/dist/commons/daemon/source/commons-daemon-1.0.5-src.tar.gz
다운로드 완료후 #tar zxvf commons-daemon-1.0.5-src.tar.gz 로 압축해제
3. 설정 및 실행 3.1 2.2 에서 압축해제까지 한후 #cd commons-daemon-1.0.5-src/src/native/unix 로 이동후 support/buildconf.sh 입력
support까지 들어간후 ./buildconf.sh 을 하게되면 configure.in 파일을 찾을수없다는 메시지가 나온다.
3.2 jsvs 생성하기전 /root/daemonTest/commons-daemon-1.0.5-src/src/native/unix 디렉토리내 목록
unix 디렉토리에서 #./configure --with-java=/usr/java/jdk1.8/ (/usr/java/jdk1.8/ 내 JDK가 설치된 경로)
#make
#mv jsvc /root/daemonTest
4. JAVA 파일
package com.daemon.test; import org.apache.commons.daemon.Daemon; import org.apache.commons.daemon.DaemonContext; import org.apache.commons.daemon.DaemonInitException; public class daemonTest implements Daemon, Runnable { private String status = ""; private int no = 0; private Thread thread = null; public void init(DaemonContext context) throws DaemonInitException, Exception { System.out.println("init..."); String[] args = context.getArguments(); if (args != null) { for (String arg : args) { System.out.println(arg); } } status = "INITED"; this.thread = new Thread(this); System.out.println("init OK."); System.out.println(); } public void start() { System.out.println("status: " + status); System.out.println("start..."); status = "STARTED"; this.thread.start(); System.out.println("start OK."); System.out.println(); } public void stop() throws Exception { System.out.println("status: " + status); System.out.println("stop..."); status = "STOPED"; this.thread.join(10); System.out.println("stop OK."); System.out.println(); } public void destroy() { System.out.println("status: " + status); System.out.println("destroy..."); status = "DESTROIED"; System.out.println("destroy OK."); System.out.println(); } public void run() { while (true) { System.out.println(no); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } if (no > 1000) { break; } no++; } } }
jar 로 export한후 /root/daemonTest 로 복사
5. shell script 작성 #!/bin/sh JAVA_HOME=/usr/java/jdk1.8/ JSVC=/root/daemonTest/jsvc USER=root DAEMON_HOME=/root/daemonTest PID_FILE=$DAEMON_HOME/daemon.pid OUT_FILE=$DAEMON_HOME/daemon.out #ERR_FILE=$DAEMON_HOME/daemon.err CLASSPATH=\ $DAEMON_HOME/commons-daemon-1.0.5.jar:\ $DAEMON_HOME/daemonTest.jar MAIN_CLASS=com.daemon.test.daemonTest case "$1" in start) # # Start Daemon # rm -f $OUT_FILE $JSVC \ -user $USER \ -java-home $JAVA_HOME \ -pidfile $PID_FILE \ -outfile $OUT_FILE \ -errfile $OUT_FILE \ -cp $CLASSPATH \ $MAIN_CLASS # # To get a verbose JVM #-verbose \ # To get a debug of jsvc. #-debug \ exit $? ;; stop) # # Stop Daemon # $JSVC \ -stop \ -nodetach \ -java-home $JAVA_HOME \ -pidfile $PID_FILE \ -outfile $OUT_FILE \ -errfile $OUT_FILE \ -cp $CLASSPATH \ $MAIN_CLASS exit $? ;; *) echo "[Usage] daemonTest.sh start | stop" exit 1;; esac
작성한 파일을 /root/daemonTest 에 복사 후 ./daemonTest.sh 실행
실행전
실행후
daemon.out, daemon.pid 가 추가되었다. daemon.out 에는 로그가 쌓여있고 pid는 쉘을 중지하면 사라진다.
cat daemon.out
6. 기타 오류사항 쉘스크립트를 윈도우에서 작성한 후 linux로 옮겨서 실행을 하였더니 아래와같은 오류메시지가 출력되었다. /bin/sh^m bad interpreter no such file or directory 해결방법은 http://tod2.tistory.com/28 을보고 해결하였다.
출처: http://hdgnote.tistory.com/7 [정리노트] |